from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app.core.config import settings
from app.api.v1.api import api_router
from app.db.init_db import init_db

# 创建FastAPI应用实例
app = FastAPI(
    title=settings.PROJECT_NAME,  # 设置API文档标题
    description="Python API 项目的RESTful API接口文档",  # API文档描述
    version="1.0.0",  # API版本号
    openapi_url=f"{settings.API_V1_STR}/openapi.json",  # OpenAPI JSON文件路径
    docs_url=f"{settings.API_V1_STR}/docs",  # Swagger UI文档路径
    redoc_url=f"{settings.API_V1_STR}/redoc",  # ReDoc文档路径
    swagger_ui_parameters={"defaultModelsExpandDepth": -1}  # 配置Swagger UI不自动展开模型
)

# 设置CORS中间件，允许跨域请求
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # 允许所有来源的跨域请求，生产环境应限制
    allow_credentials=True,  # 允许携带凭证
    allow_methods=["*"],  # 允许所有HTTP方法
    allow_headers=["*"],  # 允许所有HTTP头
)

# 包含API路由
app.include_router(api_router, prefix=settings.API_V1_STR)

# 初始化数据库
try:
    init_db()
except Exception as e:
    print(f"警告: 数据库初始化失败: {e}")
    print("应用将在没有数据库连接的情况下启动，部分功能可能不可用。")

# 应用入口点
if __name__ == "__main__":
    import uvicorn
    # 启动uvicorn服务器
    uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)  # reload=True启用热重载，便于开发